// 泛型函数
function fn<type> (value: type): type {return value}

const num = fn<number>(1)

// 简化 调用泛型函数 str1 推论成字面量类型 '1'
const str1 = fn('1')


// 泛型约束
function fn2<T> (value: T[]): T[] {
  console.log(value.length)
  return value
}

// 泛型约束
interface Ilength {
  length: number
}
function fn3<T extends Ilength> (value: T): T {
  console.log(value.length)
  return value
}